﻿#define _CRT_SECURE_NO_WARNINGS 1
//不允许创建临时变量，交换两个整数的内容
#include<stdio.h>
//int main()
//{
//	int a = 3;//011
//	int b = 5;//101
//	printf("交换前：a=%d b=%d\n", a, b);
//	a = a ^ b;//110
//	b = a ^ b;//011
//	a = a ^ b;//101
//	printf("交换后：a=%d b=%d\n", a, b);
//	return 0;
//}

//写一个函数返回参数二进制中 1 的个数。
//
//比如： 15    0000 1111    4 个 1
int Count(int n)
{
	int count = 0;
	while (n)
	{
		if(n%2)
		count++;
		n = n >> 1;
	}
	return count;
}
int main()
{
	int n;
	scanf("%d", &n);
	int ret = Count(n);
	printf("%d个1\n", ret);
	return 0;
}

//获取一个整数二进制序列中所有的偶数位和奇数位，分别打印出二进制序列
//int main()
//{
//	int n,m;
//	scanf("%d", &n);
//	printf("二进制序列：");
//	for (m = 31; m >= 0; m--)
//	{
//		printf("%d", (n >> m) & 1);
//	}
//	printf("\n奇数位：");
//	for (m = 30; m >= 0; m -= 2)
//	{
//		printf("%d", (n >> m) & 1);
//	}
//	printf("\n偶数位：");
//		for (m = 31; m > 0; m -= 2)
//		{
//			printf("%d", (n >> m) & 1);
//		}
//	return 0;
//}
//
//编程实现：两个int（32位）整数m和n的二进制表达中，有多少个位(bit)不同？ 
//
//输入例子 :
//
//1999 2299
//
//输出例子 : 7
//int main()
//{
//	int m, n;
//	int count = 0;
//	scanf("%d %d", &m, &n);
//	int ret = m ^ n;
//	while (ret)
//	{
//		if(ret%2)
//		count++;
//		ret = ret >> 1;
//	}
//	printf("%d\n", count);
//	return 0;
//}